package vue.eleve;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

import metier.Eleve;
import metier.Stage;
import vue.commun.JPanJTable;
import ctr.commun.CommunGest;
import ctr.eleve.GestAfficherStageEleve;

public class JPanAffStageEleve extends JPanel{

	private static final long serialVersionUID = -8258905260255616984L;
	private JComboBox jComboBox;
	private Stage stage = null;
	private String titre;
	private JPanJTable panJTable;
	private ArrayList<Eleve> lEleve;
	
	public JPanAffStageEleve(String titre) {
		this.titre = titre;
		init();
	}
	
	/**
	 * Constructeur de copie pour permettre de garder les infos séléctionnées precedement.
	 * @param jPanel
	 */
	public JPanAffStageEleve(JPanAffStageEleve jPanel) {
		this.titre = jPanel.titre;
		this.stage = jPanel.stage;
		init();
	}
	
	/**
	 * Initialisation du panel.
	 */
	private void init(){
		JPanel saisi = new JPanel();
		CommunGest communGest = new CommunGest();
		ArrayList<Stage> lStage = communGest.getListeStage();
		jComboBox = new JComboBox(lStage.toArray());
		if (stage != null){
			jComboBox.setSelectedItem(stage);
		}else if ( !lStage.isEmpty()){
			jComboBox.setSelectedItem(lStage.get(0));
		}
		// On passe au listener l'instance de l'objet pour qu'il accede à la comboxBox. 
		jComboBox.addActionListener(new GestAfficherStageEleve(this));
		
		JButton jButtonAff = new JButton("Afficher");
		jButtonAff.addActionListener(new GestAfficherStageEleve(this));
		
		saisi.setLayout(new FlowLayout());
		saisi.add(jComboBox);
		saisi.add(jButtonAff);
		
		JPanel info = new JPanel();
		if (stage != null){
			//nom des colonnes
			Vector<Object> nomColonne= new Vector<Object>(Arrays.asList(new String[] {"id","nom","prenom", "grade", "naissance"}));
			
			//valeurs des lignes
			Vector<Vector<Object>> dataVector= new Vector<Vector<Object>>();
			
			// Recuperation  des eleves.
			lEleve = communGest.getListeEleve(stage);
			if ( lEleve != null && !lEleve.isEmpty()){
				for (Eleve eleve : lEleve) {
					// Creation d'un vector par eleve.
					dataVector.add(eleve.getVector());
				}
			}
			// Creation de l'element JTable.
			if (panJTable == null ){
				panJTable = new JPanJTable("Stage " + stage.getLibelleStage(), dataVector, nomColonne);
			}else{
				// On modifie le contenu du panel existant.
				panJTable.setTitre("Stage " + stage.getLibelleStage());
				panJTable.getDefaultTableModel().setDataVector(dataVector, nomColonne);
			}
			// On ajout un mouseListeener pour pouvoir cliquer sur les lignes.
			panJTable.getJtable().addMouseListener(new GestAfficherStageEleve(this));
			info.add(panJTable);
		}
		this.setBorder(new TitledBorder(titre));
		this.setLayout(new BorderLayout());
		this.add(saisi, BorderLayout.NORTH);
		this.add(info, BorderLayout.CENTER);
	}

	public JComboBox getjComboBox() {
		return jComboBox;
	}

	public Stage getStage() {
		return stage;
	}

	public void setStage(Stage stage) {
		this.stage = stage;
	}

	public JPanJTable getPanJTable() {
		return panJTable;
	}

	public ArrayList<Eleve> getlEleve() {
		return lEleve;
	}
}
